/*
 * @Author: your name
 * @Date: 2022-02-10 22:30:09
 * @LastEditTime: 2022-02-10 23:04:20
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \ts\17泛型基础.ts
 */

// 泛型一般用T 表示 , < xxx > 使用

// 函数使用,比如要求参数由调用时指定
function fanxing<T>(arg1: T | undefined) {
    console.log(arg1)

}
fanxing<string>('123')
// fanxing<string>()
fanxing<number>(123)

// 数组使用
// 方式1
function fx<T>(arg: T[]) {
    console.log('泛型-数组', arg)
}
fx<string>(['12'])
fx<number>([12])
// 方式2
function fx2<T>(arg: [T]) {
    console.log('第二种方式', arg[0])
}
fx2<object>([{ a: 1 }])

// 多个泛型
// 应对多种类型
function moreFx<T, P>(arg: T, arg1: P) {
    // return `${arg} ${arg1}`
    console.log(`${arg} ${arg1}`)

}

moreFx<string, number>('ss', 123)


// 返回值
function identity<T, U>(value: T, message: U): T {
    console.log(message);
    return value;
}